<?php
/**
 * fldcms
 * ============================================================================
 * 版权所有 2017 福建华晟网络科技，并保留所有权利。
 * 网站地址: http://www.fldcms.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * Author: fld
 * Date: 2017-07-01
 */
namespace app\admin\controller;
use think\Controller;
use think\Session;
use think\Request;
class BaseController extends Controller{
    // 定义数据表
    private $db;
	//操作消息
	public $msg = "";
	/**
     * 析构函数
     */
    function __construct(){
        parent::__construct();
   	}    
    
    /*
     * 初始化操作
     */
    public function _initialize(){
    	Session::start();
        //过滤不需要登陆的行为
        if(in_array(ACTION_NAME,array('login','loginout','captcha','header','footer'))
			&& in_array(CONTROLLER_NAME,array('Login','Public'))){
        	return;
        }else{
        	header("Cache-control: private");  // history.back返回后输入框值丢失问题
        	if(session('admin_id') > 0 ){
        		if(session('admin_is_super') != 1){
					$this->check_priv();//检查管理员菜单操作权限
				}
				//获取节点信息
				$this->get_node_info();
			}else{
        		$this->error('请先登陆!',Url('Login/login'),1,3);
        	}
        }
    }
    
    public function check_priv(){
        $ctl = CONTROLLER_NAME;
        $act = ACTION_NAME;
        $act_list = session('act_list');
        //后台无需验证权限的操作
        $uncheck_act = array('index_index','index_welcome','node_getnode');
        if(in_array(strtolower($ctl.'_'.$act),$uncheck_act)){
            //后台首页控制器无需验证,超级管理员无需验证
            return true;
        }elseif(strpos($act,'ajax')){
            //所有ajax请求不需要验证权限
            return true;
        }else{
            if(!in_array($ctl.'_'.$act, $act_list)){
                $this->error('您没有操作权限['.($ctl.'_'.$act).'],请联系超级管理员分配权限',url('index/welcome'));
            }
        }
    }
    
    /**
     * 获取节点基本信息
     */
    public function get_node_info(){
    	$model = model("Base");
    	$node_info = $model->find_table('node',array('node_controll'=>CONTROLLER_NAME,'node_action'=>ACTION_NAME),'node_title,pid');
    	$p_node = $model->find_table('node',array('node_id'=>$node_info['pid']),'node_title');
    	if(!empty($p_node)){
    		$node_info['p_title'] = $p_node['node_title'];
    	}
    	$this->assign('node_info',$node_info);
    }
    //设置用户的权限节点信息
    public function setRoleNode(){
    	$admin_role_id = session('admin_role_id');
    	if($admin_role_id){
    		$model = model("Base");
    		$role_info = $model->find_table('role',array('role_id'=>$admin_role_id));
    		$sql = "select concat(a.node_controll,'_',a.node_action) as act"
 				 . " from ".config('database')['prefix']."node a INNER JOIN ".config('database')['prefix']."role_node b on a.node_id = b.node_id "
				 . " where b.role_id = ".$admin_role_id;
    		$node_list = $model->querySql($sql);
    		$act_list = two_array_one($node_list,'act');
    		session('act_list',$act_list);
    		session('role_name',$role_info['role_name']);
    	}
    }
    
    /**
     * 获取有权限的菜单节点信息
     * @param int $pid  父类编号
     */
    public function get_node_list($pid){
        $model = model("Base");
        $act_list = session('act_list');
        $list = $model->select_table('node','status = 1 and is_menu = 1 and pid = '.$pid,'*','sort asc');
        if(!empty($list)){
            foreach ($list as $k=>$v){
            	if(!in_array($v['node_controll'].'_'.$v['node_action'], $act_list)){
            		unset($list[$k]);
            	}else{
            		$c_list = $this->get_node_list($v['node_id']);
            		if(!empty($c_list)){
            			$list[$k]['c_list'] = $c_list;
            		}
            	}
            }
        }
        return $list;
    }
    
}


?>